use crate::rtmp::handshake::errors::HandshakeError;

// RTMP 握手协议的服务器逻辑
pub trait THandshakeServer {
    // 读取客户端发送的 C0 数据（协议版本）
    fn read_c0(&mut self) -> Result<(), HandshakeError>;
    // 读取客户端发送的 C1 数据（时间戳和随机数据）
    fn read_c1(&mut self) -> Result<(), HandshakeError>;

    // 读取客户端发送的 C2 数据（验证数据）
    fn read_c2(&mut self) -> Result<(), HandshakeError>;

    // 向客户端发送 S0 数据（协议版本）
    fn write_s0(&mut self) -> Result<(), HandshakeError>;
    // 向客户端发送 S1 数据（时间戳和随机数据）
    fn write_s1(&mut self) -> Result<(), HandshakeError>;
    // 向客户端发送 S2 数据（验证数据）
    fn write_s2(&mut self) -> Result<(), HandshakeError>;
}

// 客户端握手协议 trait
pub trait THandshakeClient {
    // 向服务器发送 C0 数据（协议版本）
    fn write_c0(&mut self) -> Result<(), HandshakeError>;

    // 向服务器发送 C1 数据（时间戳和随机数据）
    fn write_c1(&mut self) -> Result<(), HandshakeError>;

    // 向服务器发送 C2 数据（验证数据）
    fn write_c2(&mut self) -> Result<(), HandshakeError>;

    // 读取服务器发送的 S0 数据（协议版本）
    fn read_s0(&mut self) -> Result<(), HandshakeError>;

    // 读取服务器发送的 S1 数据（时间戳和随机数据）
    fn read_s1(&mut self) -> Result<(), HandshakeError>;

    // 读取服务器发送的 S2 数据（验证数据）
    fn read_s2(&mut self) -> Result<(), HandshakeError>;
}
